package org.dylan.common.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.dylan.common.model.OrderBy;
import org.dylan.common.model.QueryParam;
import org.dylan.common.model.QueryRequest;

/**
 * 数据访问基类
 * 
 * @author Dylan
 * @date 2011-6-24 上午10:48:32
 * @param <T>
 *            实体类型
 * @param <PK>
 *            实体主键，Serializable子类
 */
public interface BaseDao<T, PK extends Serializable> {

//	/**
//	 * 保存新增或修改的对象.
//	 */
//	public void save(final T entity);
//
//	/**
//	 * 删除对象.
//	 * 
//	 * @param entity
//	 *            对象必须是session中的对象或含id属性的transient对象.
//	 */
//	public void remove(final T entity);
//
//	/**
//	 * 按id删除对象.
//	 */
//	public void remove(final PK id);
//
//	/**
//	 * 按id获取对象.
//	 */
//	public T findById(final PK id);
//
//	/**
//	 * 按id列表获取对象列表.
//	 */
//	public List<T> get(final Collection<PK> ids);
//
//	/**
//	 * 获取全部对象.
//	 */
//	public List<T> getAll();

	/**
	 * 获取全部对象
	 */
	public List<T> findByProperty(String property, Object value);

	/**
	 * 按属性查找唯一对象, 匹配方式为相等.
	 */
	public T findUniqueBy(final String propertyName, final Object value);
	/**
	 * 通过单个请求参数进行数据的查询
	 * @param queryParam
	 * @return
	 */
	public List<T> findByParam(QueryParam queryParam);
	/**
	 * 通过给定的单个请求参数和数据排序进行数据的查询
	 * @param queryParam
	 * @param order
	 * @return
	 */
	public List<T> findByParam(QueryParam queryParam,OrderBy order);
	/**
	 * 通过数据请求参数信息进行数据查询
	 * @param queryRequest
	 * @return
	 */
	public List<T> findByParam(QueryRequest queryRequest);
	/**
	 * 给定hql语句，执行数据检索
	 * @param hql
	 * @return
	 */
	public <E> List<E> findByHQL(String hql);
	/**
	 * 给定hql语句和查询参数信息，执行数据检索
	 * @param hql
	 * @param queryRequest
	 * @return
	 */
	public <E> List<E> findByHQL(String hql,QueryRequest queryRequest);

}
